/**
 * 字典
 */
class Dictionary {
    constructor() {
        this.items = {};
    }
    // 向字典添加新元素
    set(key, value) {
        this.items[key] = value;
    }
    // 从字典中移除键对应的值
    remove(key) {
        if (!this.has(key)) {
            return false;
        }
        delete this.items[key];
        return true;
    }
    // 判断字典中是否含有某个键
    has(key) {
        return this.items.hasOwnProperty(key);
    }
    // 返回键对应的值
    get(key) {
        return this.has(key) ? this.items[key] : undefined;
    }
    // 清空
    clear() {
        this.items = {};
    }
    // 字典中元素数量
    size() {
        return Object.keys(this.items).length;
    }
    // 返回字典中所有键名组成的数组
    keys() {
        const keys = [];
        for (let key in this.items) {
            if (this.has(key)) {
                keys.push(key);
            }
        }
        return keys;
    }
    // 返回字典中所有键值组成的数组
    values() {
        const values = [];
        for (let key in this.items) {
            if (this.has(key)) {
                values.push(this.items[key]);
            }
        }
        return values;
    }
    // 查看字典元素
    getItems() {
        return this.items;
    }
}

// test case
const d = new Dictionary()
d.set('address', 'jiangxi')
d.set('sex', 'girl')
d.set('name', 'fade')
// console.log(d.has('name'))
// console.log(d.getItems())

d.set('name', 'custom')

d.remove('name')

console.log(d.keys())
console.log(d.values())
console.log(d.getItems())
